﻿using System;
using System.Net.Mail;
using System.Threading;
using Castle.Core.Logging;
using User.Global.Constvalues.Web;
using User.Global.Contracts.Mail;
using User.Global.Resources;

namespace User.Global.Common.Mail
{
    public class AccountMails : IAccountMails
    {
        /// <summary>
        /// Der Aktuell verwendete Logger für die jeweilige Klasse per Property Injection gesetzt.
        /// </summary>
        public ILogger Logger { get; set; }

        /// <summary>
        /// Versenden der RecoveryMail mit dem Tokenlink
        /// </summary>
        /// <param name="recoveryLink">Der Recoverylink mit dem Token</param>
        /// <param name="receiver">Der Empfänger an den die Mail versendet werden soll.</param>
        public void SendAccountRecoveryMail(string recoveryLink, string receiver)
        {
            ThreadPool.QueueUserWorkItem(t =>
            {
                try
                {
                    //Zusammenbauen der passenden Maildaten
                    string mailMessage = string.Format(MailMessages.PasswordTokenMail, recoveryLink);
                    string subject = string.Format("Passwort Recovery EMail von '{0}'", WebConstValues.WebSiteBaseUrl);

                    //Die Mailmessage aus dem Parameter wieder holen
                    MailMessage message = new MailMessage();
                    message.Subject = subject;
                    message.Body = mailMessage;
                    message.To.Add(new MailAddress(receiver));

                    //Der SMTP Client liest die Mail Credentials direkt aus der Web.Config aus.
                    SmtpClient client = new SmtpClient();
                    client.Send(message);
                }
                catch (Exception exception)
                {
                    Logger.Error("SendMail für SendAccountRecoveryMail:", exception);
                }
            });
        }
    }
}
